package cn.caishen.report.service.report;

import cn.caishen.report.common.utils.LbMap;
import cn.caishen.report.domain.report.ReportChart;
import cn.caishen.report.domain.report.ReportConfig;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.List;

/**
 * 报表配置Service接口
 *
 * @author LB
 * @description 报表配置Service接口
 * @create 2022-01-17 15:50:03
 **/
public interface ReportConfigService extends IService<ReportConfig> {

    /**
     * 通过配置获取报表列表
     *
     * @param moduleId
     * @param detailReportConfigId
     * @return
     */
    LbMap getModuleReport(Integer moduleId, Integer detailReportConfigId);

    /**
     * 查询动态报表，增加参数，是否需要合计，如果 needSum = 1，则只是查询合计
     *
     * @param param
     * @param moduleId
     * @param detailReportConfigId
     * @param page
     * @param limit
     * @param needSum
     * @param selectFields
     * @param orderFields
     * @param groupFields
     * @param lastSql
     * @return
     */
    LbMap getReportList(LbMap param, int moduleId, int detailReportConfigId, int page, int limit, boolean needSum,
                        String selectFields, String orderFields, String groupFields, String lastSql);

    /**
     * 分页查询动态报表
     *
     * @param param
     * @param moduleId
     * @param detailReportConfigId
     * @param page
     * @param limit
     * @param selectFields
     * @param orderFields
     * @param groupFields
     * @param lastSql
     * @return
     */
    LbMap getReportList(LbMap param, int moduleId, int detailReportConfigId, int page, int limit, String selectFields,
                        String orderFields, String groupFields, String lastSql);

    /**
     * 动态报表导出EXCEL
     *
     * @param reportMap
     * @return
     */
    XSSFWorkbook reportToExcel(LbMap reportMap);

    /**
     * 获取图形报表坐标轴
     *
     * @param moduleId
     * @return
     */
    LbMap getReportAxis(Integer moduleId);

    /**
     * 获取图形报表数据
     *
     * @param oriList
     * @param xParam
     * @param yParam
     * @param zParam
     * @param param
     * @return
     */
    LbMap getReportAxisList(List<LbMap> oriList, String xParam, String yParam, String zParam, LbMap param);

    /**
     * 获取看板配置
     *
     * @param moduleId
     * @return
     */
    List<ReportChart> getReportChart(Integer moduleId);

    /**
     * 获取看板列表的条件下拉内容
     *
     * @param moduleId
     * @return
     */
    LbMap getReportChartWhere(Integer moduleId);

    /**
     * 分页查询列表
     *
     * @param page 页数
     * @param limit 条数
     * @param param 参数
     * @return PageInfo 分页列表
     */
    PageInfo<ReportConfig> getList(int page, int limit, LbMap param);

    /**
     * 查询所有列表
     *
     * @param param 参数
     * @return list 全部列表
     */
    List<ReportConfig> getAllList(LbMap param);

    /**
     * 通过编号查询
     *
     * @param primaryKey id
     * @return 报表配置
     */
    ReportConfig getById(String primaryKey);

    /**
     * 新增信息
     *
     * @param reportConfig reportConfig
     */
    void saveOne(ReportConfig reportConfig);

    /**
     * 修改信息
     *
     * @param reportConfig reportConfig
     */
    void update(ReportConfig reportConfig);

    /**
     * 删除信息
     *
     * @param primaryKey id
     */
    void delete(String primaryKey);

    /**
     * 获取报表标题、条件、用户自定义标题等信息
     *
     * @param reportConfigId
     * @param whereOnShow
     * @return
     */
    ReportConfig getReportInfo(Integer reportConfigId, boolean whereOnShow);
}
